home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SPACE 2
/
SPACE - Library 2 - Volume 1.iso
/
program
/
124
/
lib
/
gem.c
< prev
next >
Wrap
C/C++ Source or Header
|
1988-03-31
|
21KB
|
1,149 lines
/*
* the GEM library
* contains both AES and VDI stuff, though not all of it
*/
#include "gem.h"
extern short ct0, ct1, ct2, ct3, ct4, ct5, ct6, ct7;
extern short ii0, ii1, ii2, ii3, ii4, ii5, ii6, ii7, ii8, ii9,
ii10, ii11, ii12, ii13, ii14, ii15;
extern short io0, io1, io2, io3, io4, io5, io6, iox[40];
extern short pi0, pi1, pi2, pi3, pi4, pi5, pi6, pi7, pix[6];
extern short po0, po1, po2, po3, pox[12];
extern short *ai0, *ai1;
extern short *ao0;
extern short *vdi0, *vdi1, *vdi2, *vdi3, *vdi4, *vdi5;
extern short *aes0, *aes1, *aes2, *aes3, *aes4, *aes5;
extern short global[16];
/*
* the c runtime start up routine for GEM processes
* no argv argc stuff, no stdio (use TOS routines for file access)
*
* assumes a startup prg.s of
* . _bstk 2048
* . _estk 4
* taa 7 6
* lll 4 0
* sgl _estk
* lag _estk 7
* jsr _cprg
* plus definitions for all the above externs
*/
#define SETBLK 0x4A
#define TERM 0x4C
_cprg(tpa) long tpa; {
int i;
long x, *lp;
/* compute size of program, give memory back to TOS */
lp = tpa;
x = lp[3] + lp[5] + lp[7] + 0x100;
if (trap(1, SETBLK, 0, tpa, x))
appl_exit(-1);
/* set up the aespb and vdipb arrays */
aes0 = &ct0;
aes1 = global;
aes2 = &ii0;
aes3 = &io0;
aes4 = &ai0;
aes5 = &ao0;
vdi0 = &ct0;
vdi1 = &ii0;
vdi2 = &pi0;
vdi3 = &io0;
vdi4 = &po0;
/* init standard i/o */
_ioinit();
/* run the program */
i = main();
/* close up shop */
appl_exit(i);
}
#define vdc(op,pi,ii,xx,yy) ct0=op;ct1=pi;ct2=ct4=0;ct3=ii;ct5=xx;ct6=yy;vdi()
/* open virtual workstation */
v_opnvwk(in, h, out)
struct vdi_openin *in;
short *h;
struct vdi_openout *out; {
vdi0 = &ct0;
vdi1 = in;
vdi2 = &pi0;
vdi3 = out;
vdi4 = &(out->devicetyp);
vdc(100, 0, 11, 0, 1);
*h = ct6;
vdi0 = &ct0;
vdi1 = &ii0;
vdi2 = &pi0;
vdi3 = &io0;
vdi4 = &po0;
}
/* close virtual workstation */
v_clsvwk(h) short h; {
vdc(101, 0, 0, 0, h);
}
v_clrwk(h) short h; {
vdc(3, 0, 0, 0, h);
}
/* cursor control */
v_enter_cur(h) short h; { /* enter cursor mode - shows cursor */
vdc(5, 0, 0, 3, h);
}
v_exit_cur(h) short h; { /* exit cursor mode - removes cursor */
vdc(5, 0, 0, 2, h);
}
v_rvon(h) { /* reverse video on - cursor text */
vdc(5, 0, 0, 13, h);
}
v_rvoff(h) { /* reverse video off - cursor text */
vdc(5, 0, 0, 14, h);
}
v_curhome(h) { /* home cursor */
vdc(5, 0, 0, 8, h);
}
vs_curaddress(h, r, c) { /* put cursor on row r (0-24) and col. c (0-79) */
ii0 = c;
ii1 = r;
vdc(5, 0, 2, 11, h);
}
/* screen operations */
v_eeos(h) { /* erase from cursor to end of screen */
vdc(5, 0, 0, 9, h);
}
/* polymarkers */
v_pmarker(h, count, xy) short xy[]; { /* plot markers at xy coords. passed */
vdi2 = xy;
vdc(7, count, 0, 0, h);
vdi2 = &pi0;
}
vsm_color(h, color) { /* sets the color that marker is plotted with */
return vdi_attr(h, 20, color); /* color: 0 - numcolors */
}
vsm_height(h, height) { /* set the height of plotted markers (not of type 1) */
pi0 = 0;
pi1 = height; /* height: in pels, 1 - maxy */
vdc(19, 1, 0, 0, h);
return po1;
}
vsm_type(h, type) { /* set marker type - returns type selected */
return vdi_attr(h, 18, type); /* type: 1 - nummarktyp */
}
vqm_attributes(h, at) struct vdi_mattr *at; { /* query marker attributes */
vdi3 = at;
vdi4 = &(at->markwid);
vdc(36, 0, 0, 0, h);
vdi3 = &io0;
vdi4 = &po0;
}
/* polylines */
v_pline(h, count, xy) short xy[]; { /* draw multi-segment line */
vdi2 = xy;
vdc(6, count, 0, 0, h); /* count >= 2 */
vdi2 = &pi0;
}
vsl_color(h, color) { /* set line color - returns color selected */
return vdi_attr(h, 17, color);
}
vsl_ends(h, begin, end) { /* set line end styles */
ii0 = begin;
ii1 = end;
vdc(108, 0, 2, 0, h);
}
vsl_type(h, type) { /* set line type - returns type selected */
return vdi_attr(h, 15, type);
}
vsl_udsty(h, pat) { /* set user defined line type pattern */
vdi_attr(h, 113, pat); /* e.g. dash line type is: 0xFF00 */
}
vsl_width(h, w) { /* set line width - returns actual width */
pi0 = w;
vdc(16, 1, 0, 0, h);
return po0;
}
vql_attributes(h, at) struct vdi_lattr *at; { /* query line attributes */
vdi3 = at;
vdi4 = &(at->linewid);
vdc(35, 0, 0, 0, h);
vdi3 = &io0;
vdi4 = &po0;
}
/* text */
vst_alignment(h, hin, vin, hout, vout)
short *hout, *vout; { /* set text alignment */
ii0 = hin;
ii1 = vin;
vdc(39, 0, 2, 0, h);
*hout = io0;
*vout = io1;
}
vst_color(h, color) { /* set text color - color selected returned */
return vdi_attr(h, 22, color);
}
vst_effects(h, effects) { /* set text effects - effects selected returned */
return vdi_attr(h, 106, effects);
}
/* set text height - absolute mode */
vst_height(h, height, wch, hch, wcl, hcl) int *wch, *hch, *wcl, *hcl; {
pi0 = 0;
pi1 = height; /* height: distance from baseline to top of char. cell */
vdc(12, 1, 0, 0, h);
*wch = po0;
*hch = po1;
*wcl = po2;
*hcl = po3;
}
vst_point(h, height) { /* set text height - points mode, height returned */
/* distance between baselines of two consecutive lines */
return vdi_attr(h, 107, height);
}
vst_rotation(h, angle) { /* set baseline vector - angle selected returned */
return vdi_attr(h, 13, angle); /* angle expressed in .1s of a degree */
}
vst_font(h, font) { /* set font - returns font selected */
return vdi_attr(h, 21, font);
}
vswr_mode(h, mode) { /* set writing mode - mode selected returned */
return vdi_attr(h, 32, mode);
}
v_curtext(h, s) char *s; {
_vdi_tcpy(5, 0, 12, h, s);
}
v_gtext(h, x, y, s) char *s; {
pi0 = x;
pi1 = y;
_vdi_tcpy(8, 2, 0, h, s);
}
_vdi_tcpy(op, pin, p5, h, s) char *s; {
short *ip, tbuf[140];
int i;
vdi1 = tbuf;
for (ip = tbuf, i = 0; (i < 140) && (*s != '\0'); ++i) {
*ip++ = *s++;
}
vdc(op, pin, i, p5, h);
vdi1 = &ii0;
}
vqt_attributes(h, at) struct vdi_tattr *at; { /* query text attributes */
vdi3 = at;
vdi4 = &(at->charwid);
vdc(38, 0, 0, 0, h);
vdi3 = &io0;
vdi4 = &po0;
}
/* graphic primitives */
v_arc(h, x, y, r, sa, ea) { /* draw arc - portion of a circle */
ii0 = sa; /* start angle - .1s of degree */
ii1 = ea; /* end angle */
pi0 = x; /* center - x coord. */
pi1 = y; /* center - y coord. */
pi6 = r; /* radius */
vdc(11, 4, 2, 2, h);
}
v_bar(h, xy) int *xy; { /* draw a bar (box) */
pi0 = *xy;
pi1 = *++xy;
pi2 = *++xy;
pi3 = *++xy;
vdc(11, 2, 0, 1, h);
}
v_circle(h, x, y, r) { /* draw a circle */
pi0 = x;
pi1 = y;
pi4 = r;
vdc(11, 3, 0, 4, h);
}
v_contourfill(h, x, y, color) { /* fill area enclosing x,y */
pi0 = x;
pi1 = y;
ii0 = color; /* color < 0: boundry of any color other than xy's */
vdc(103, 1, 1, 0, h);
}
v_ellarc(h, x, y, xr, yr, sa, ea) { /* draw an elliptical arc */
ii0 = sa; /* start angle */
ii1 = ea; /* end angle */
pi0 = x; /* center point x */
pi1 = y; /* center point y */
pi2 = xr; /* x radius */
pi3 = yr; /* y radius */
vdc(11, 2, 2, 6, h);
}
v_ellpie(h, x, y, xr, yr, sa, ea) { /* draw an elliptical pie slice */
ii0 = sa;
ii1 = ea;
pi0 = x;
pi1 = y;
pi2 = xr;
pi3 = yr;
vdc(11, 2, 2, 7, h);
}
v_ellipse(h, x, y, xr, yr) { /* draw an ellipse */
pi0 = x;
pi1 = y;
pi2 = xr;
pi3 = yr;
vdc(11, 2, 0, 5, h);
}
v_rbox(h, xy) short *xy; { /* draw a rounded box */
pi0 = *xy; /* xy coordinates of lower left and upper right corners */
pi1 = *++xy;
pi2 = *++xy;
pi3 = *++xy;
vdc(11, 2, 0, 8, h);
}
v_rfbox(h, xy) short *xy; { /* draw a rounded filled box */
pi0 = *xy; /* xy coordinates of lower left and upper right corners */
pi1 = *++xy;
pi2 = *++xy;
pi3 = *++xy;
vdc(11, 2, 0, 9, h);
}
v_recfl(h, xy) short *xy; { /* draw a filled rectangle */
pi0 = *xy; /* xy coordinates of diagonally opposite corners */
pi1 = *++xy;
pi2 = *++xy;
pi3 = *++xy;
vdc(114, 2, 0, 0, h);
}
/* area fill and attributes */
v_fillarea(h, count, xy) short xy[]; {
vdi2 = xy; /* fill area defined by a multi-segment line */
vdc(9, count, 0, 0, h); /* count >= 2 */
vdi2 = &pi0;
}
vsf_color(h, color) { /* set fill color */
return vdi_attr(h, 25, color);
}
vsf_perimeter(h, v_flag) { /* set fill perimeter visibility */
return vdi_attr(h, 104, v_flag); /* 0 = invisible, 1 = visible */
}
vsf_interior(h, style) { /* set fill interior style */
return vdi_attr(h, 23, style);
}
vsf_style(h, style) { /* set fill style */
/* interior pattern: 0-23, interior hatch: 0-11 */
return vdi_attr(h, 24, style);
}
vsf_updat(h, fill, planes) int *fill; { /* set user defined fill pattern */
int n;
n = planes << 4; /* 16 words per plane */
vdi1 = fill;
vdc(112, 0, n, 0, h);
vdi1 = &ii0;
}
vqf_attributes (h, at) struct vdi_fattr *at; {
/* inquire current fill area attributes */
vdi4 = at;
vdc(37, 0, 0, 0, h);
vdi4 = &po0;
}
/* pixel operation */
v_get_pixel(h, x, y, pel, color) short *pel, *color; { /* get pixel value */
pi0 = x;
pi1 = y;
vdc(105, 1, 0, 0, h);
*pel = io0;
*color = io1;
}
vro_cpyfm(h, mode, xy, src, des) short xy[]; struct mfdb *src, *des; {
struct mfdb **p;
p = (struct mfdb **) &ct7;
*p = src;
*++p = des;
ii0 = mode;
vdi2 = xy;
vdc(109, 4, 1, 0, h);
vdi2 = &pi0;
}
vrt_cpyfm(h, mode, pxy, src, dst, color) int *pxy; struct mfdb *src, *dst; {
struct mfdb **p;
p = &ct7;
*p++ = src;
*p = dst;
ii0 = mode;
ii1 = color;
ii2 = 0;
vdi2 = pxy;
vdc(121, 4, 3, 0, h);
vdi2 = &pi0;
}
vr_trnfm(h, src, dst) struct mfdb *src, *dst; {
struct mfdb **p;
p = &ct7;
*p++ = src;
*p = dst;
vdc(110, 0, 0, 0, h);
}
vq_color(h, index, set_flag, rgb) short rgb[]; {
/* inquire color representation */
ii0 = index; /* color to enquire about */
ii1 = set_flag; /* 0 = values set; 1 = values realized */
vdc(26, 0, 2, 0, h);
rgb[0] = io1; /* red intensity - .1% */
rgb[1] = io2; /* green intensity */
rgb[2] = io3; /* blue intensity */
}
vs_color(h, index, rgb) short rgb[]; { /* set color representation */
ii0 = index;
ii1 = rgb[0]; /* red */
ii2 = rgb[1]; /* green */
ii3 = rgb[2]; /* blue */
vdc(14, 0, 4, 0, h);
}
vq_key_s(h, status) int h, *status; {
ct0 = 128;
ct1 = ct2 = ct3 = 0;
ct6 = h;
vdi();
*status = io0;
}
/* mouse functions */
v_show_c(h, mstyle) { /* show mouse */
ii0 = mstyle;
vdc(122, 0, 1, 0, h);
}
v_hide_c(h) { /* hide mouse */
vdc(123, 0, 0, 0, h);
}
vsc_form(h, form) struct vdi_form *form; { /* define mouse shape */
vdi1 = form;
vdc(111, 0, 37, 0, h);
vdi1 = &ii0;
}
vq_mouse(h, pstatus, px, py) short *pstatus, *px, *py; {
/* get mouse's status */
vdc(124, 0, 0, 0, h);
*pstatus = io0;
*px = po0;
*py = po1;
}
vdi_attr(h, op, attr) { /* implements many common routines */
ii0 = attr;
vdc(op, 0, 1, 0, h);
return io0;
}
/* GEM application init and exit */
appl_init() {
ct0 = 10;
ct2 = 1;
ct1 = ct3 = ct4 = 0;
aes();
return io0;
}
appl_exit(i) { trap(1, TERM, i); }
/* VDI routines for the GEM library */
vq_extnd(handle, owflag, out) int *out; {
int i, j, *intout, *ptsout;
ct0 = 102;
ct1 = 0;
ct3 = 1;
ct6 = handle;
ii0 = owflag;
vdi();
intout = &io0;
for (i = 0; i < 45; i++) out[i] = intout[i];
ptsout = &po0;
for (j = 0; j < 12; j++) out[i++] = ptsout[j];
}
/*
* GEM:VDI set clipping rectangle
* flag = 0 no clipping
* flag = 1 clipping on
* pxy[] should contain the upper left and bottom right coords
*/
vs_clip(handle, flag, pxy) int *pxy; {
ct0 = 129;
ct1 = 2;
ct3 = 1;
ct6 = handle;
ii0 = flag;
vdi2 = pxy;
vdi();
vdi2 = &pi0;
}
/* GEM:VDI put justified text on the screen */
v_justified(handle, x, y, string, len, wspace, cspace) char *string; {
int *ip;
ct0 = 11;
ct1 = 2;
ct6 = handle;
ii0 = wspace;
ii1 = cspace;
ip = &ii2;
for (ct3 = 2; *ip++ = *string++; ct3++)
;
pi0 = x;
pi1 = y;
pi2 = len;
vdi();
}
/* AES: resource handling */
rsrc_gaddr(type, index, addr) long **addr; {
ct0 = 112;
ct1 = 2;
ct2 = ct4 = 1;
ct3 = 0;
ii0 = type;
ii1 = index;
aes();
*addr = ao0;
return io0;
}
rsrc_saddr(type, index, addr) long *addr; {
ct0 = 113;
ct1 = 2;
ct2 = ct3 = 1;
ct4 = 0;
ii0 = type;
ii1 = index;
ai0 = addr;
aes();
return io0;
}
/* graphics handling */
graf_handle(wchar, hchar, wbox, hbox) int *wchar, *hchar, *wbox, *hbox; {
ct0 = 77;
ct2 = 5;
ct1 = ct3 = ct4 = 0;
aes();
*wchar = io1;
*hchar = io2;
*wbox = io3;
*hbox = io4;
return io0;
}
graf_rubberbox(x, y, minw, minh, lastw, lasth) int *lastw, *lasth; {
ct0 = 70;
ct1 = 4;
ct2 = 3;
ct3 = ct4 = 0;
ii0 = x;
ii1 = y;
ii2 = minw;
ii3 = minh;
aes();
*lastw = io1;
*lasth = io2;
return io0;
}
graf_dragbox(dw, dh, sx, sy, bx, by, bw, bh, endx, endy) int *endx, *endy; {
ct0 = 71;
ct1 = 8;
ct2 = 3;
ct3 = ct4 = 0;
ii0 = dw;
ii1 = dh;
ii2 = sx;
ii3 = sy;
ii4 = bx;
ii5 = by;
ii6 = bw;
ii7 = bh;
aes();
*endx = io1;
*endy = io2;
return io0;
}
graf_movebox(w, h, sx, sy, dx, dy) {
ct0 = 72;
ct1 = 6;
ct2 = 1;
ct3 = ct4 = 0;
ii0 = w;
ii1 = h;
ii2 = sx;
ii3 = sy;
ii4 = dx;
ii5 = dy;
aes();
return io0;
}
graf_growbox(bx, by, bw, bh, ex, ey, ew, eh) {
ct0 = 73;
ct1 = 8;
ct2 = 1;
ct3 = ct4 = 0;
aes2 = &bx;
aes();
aes2 = &ii0;
return io0;
}
graf_shrinkbox(ex, ey, ew, eh, bx, by, bw, bh) {
ct0 = 73;
ct1 = 8;
ct2 = 1;
ct3 = ct4 = 0;
aes2 = &ex;
aes();
aes2 = &ii0;
return io0;
}
graf_watchbox(tree, obj, instate, outstate) int *tree; {
ct0 = 75;
ct1 = 4;
ct2 = ct3 = 1;
ct4 = 0;
ii1 = obj;
ii2 = instate;
ii3 = outstate;
ai0 = tree;
aes();
return io0;
}
graf_slidebox(tree, parent, obj, vh) int *tree; {
ct0 = 76;
ct1 = 3;
ct2 = ct3 = 1;
ct4 = 0;
ii0 = parent;
ii1 = obj;
ii2 = vh;
ai0 = tree;
aes();
return io0;
}
graf_mouse(type, shape) int *shape; {
ct0 = 78;
ct1 = ct2 = ct3 = 1;
ct4 = 0;
ii0 = type;
ai0 = shape;
aes();
return io0;
}
graf_mkstate(x, y, mstate, kstate) int *x, *y, *mstate, *kstate; {
ct0 = 79;
ct1 = ct3 = ct4 = 0;
ct2 = 5;
aes();
*x = io1;
*y = io2;
*mstate = io3;
*kstate = io4;
return io0;
}
/* window handling */
wind_get(handle, gfld, gw1, gw2, gw3, gw4) int *gw1, *gw2, *gw3, *gw4; {
ct0 = 104;
ct1 = 2;
ct2 = 5;
ct3 = ct4 = 0;
ii0 = handle;
ii1 = gfld;
aes();
*gw1 = io1;
*gw2 = io2;
*gw3 = io3;
*gw4 = io4;
return io0;
}
wind_create(kind, x, y, w, h) {
ct0 = 100;
ct1 = 5;
ct2 = 1;
ct3 = ct4 = 0;
ii0 = kind;
ii1 = x;
ii2 = y;
ii3 = w;
ii4 = h;
aes();
return io0;
}
wind_set(handle, field, s1, s2, s3, s4) {
ct0 = 105;
ct1 = 6;
ct2 = 1;
ct3 = ct4 = 0;
ii0 = handle;
ii1 = field;
ii2 = s1;
ii3 = s2;
ii4 = s3;
ii5 = s4;
aes();
return io0;
}
wind_open(handle, x, y, w, h) {
ct0 = 101;
ct1 = ct2 = 5;
ct3 = ct4 = 0;
ii0 = handle;
ii1 = x;
ii2 = y;
ii3 = w;
ii4 = h;
aes();
return io0;
}
wind_close(handle) {
ct0 = 102;
ct1 = ct2 = 1;
ct3 = ct4 = 0;
ii0 = handle;
aes();
return io0;
}
wind_delete(handle) {
ct0 = 103;
ct1 = ct2 = 1;
ct3 = ct4 = 0;
ii0 = handle;
aes();
return io0;
}
wind_find(x, y) {
ct0 = 106;
ct1 = 2;
ct2 = 1;
ct3 = ct4 = 0;
ii0 = x;
ii1 = y;
aes();
return io0;
}
wind_update(n) {
ct0 = 107;
ct1 = ct2 = 1;
ct3 = ct4 = 0;
ii0 = n;
aes();
return io0;
}
wind_calc(
type, kind, xi, yi, wi, hi,
xo, yo, wo, ho) int *xo, *yo, *wo, *ho; {
ct0 = 108;
ct1 = 6;
ct2 = 5;
ct3 = ct4 = 0;
ii0 = type;
ii1 = kind;
ii2 = xi;
ii3 = yi;
ii4 = wi;
ii5 = hi;
aes();
*xo = io1;
*yo = io2;
*wo = io3;
*ho = io4;
return io0;
}
/* event handling */
event_multi(
flags, clicks, mask, state,
af, ax, ay, aw, ah,
bf, bx, by, bw, bh,
buff, lo, hi,
ox, oy, obut, ostate, okret, obret)
int *ox, *oy, *obut, *ostate, *okret, *obret;
{
ct0 = 25;
ct1 = 16;
ct2 = 7;
ct3 = 1;
ct4 = 0;
ii0 = flags;
ii1 = clicks;
ii2 = mask;
ii3 = state;
ii4 = af;
ii5 = ax;
ii6 = ay;
ii7 = aw;
ii8 = ah;
ii9 = bf;
ii10 = bx;
ii11 = by;
ii12 = bw;
ii13 = bh;
ii14 = lo;
ii15 = hi;
ai0 = buff;
aes();
*ox = io1;
*oy = io2;
*obut = io3;
*ostate = io4;
*okret = io5;
*obret = io6;
return io0;
}
/* object handling */
objc_draw(tree, start, depth, xclip, yclip, wclip, hclip) int *tree; {
ct0 = 42;
ct1 = 6;
ct2 = ct3 = 1;
ct4 = 0;
ii0 = start;
ii1 = depth;
ii2 = xclip;
ii3 = yclip;
ii4 = wclip;
ii5 = hclip;
ai0 = tree;
aes();
return io0;
}
objc_find(tree, start, depth, x, y) int *tree; {
ct0 = 43;
ct1 = 4;
ct2 = ct3 = 1;
ct4 = 0;
ii0 = start;
ii1 = depth;
ii2 = x;
ii3 = y;
ai0 = tree;
aes();
return io0;
}
objc_offset(tree, object, xoff, yoff) int *tree, *xoff, *yoff; {
ct0 = 43;
ct1 = 1;
ct2 = 3;
ct3 = 1;
ct4 = 0;
ii0 = object;
ai0 = tree;
aes();
*xoff = io1;
*yoff = io2;
return io0;
}
objc_edit(tree, object, ch, idx, kind, newidx) int *tree, *newidx; {
ct0 = 46;
ct1 = 4;
ct2 = 2;
ct3 = 1;
ct4 = 0;
ii0 = object;
ii1 = ch;
ii2 = idx;
ii3 = kind;
ai0 = tree;
aes();
*newidx = io1;
return io0;
}
objc_change(tree, object, resvd, x, y, w, h, state, redraw) int *tree; {
ct0 = 47;
ct1 = 8;
ct2 = ct3 = 1;
ct4 = 0;
ii0 = object;
ii1 = resvd;
ii2 = x;
ii3 = y;
ii4 = w;
ii5 = h;
ii6 = state;
ii7 = redraw;
ai0 = tree;
aes();
return io0;
}
/* menu handling */
menu_bar(tree, show) int *tree; {
ct0 = 30;
ct1 = ct2 = ct3 = 1;
ct4 = 0;
ii0 = show;
ai0= tree;
aes();
return io0;
}
menu_icheck(tree, item, check) int *tree; {
ct0 = 31;
ct1 = 2;
ct2 = ct3 = 1;
ct4 = 0;
ii0 = item;
ii1 = check;
ai0 = tree;
aes();
return io0;
}
menu_enable(tree, item, enable) int *tree; {
ct0 = 32;
ct1 = 2;
ct2 = ct3 = 1;
ct4 = 0;
ii0 = item;
ii1 = enable;
ai0 = tree;
aes();
return io0;
}
menu_tnormal(tree, title, normal) int *tree; {
ct0 = 33;
ct1 = 2;
ct2 = ct3 = 1;
ct4 = 0;
ii0 = title;
ii1 = normal;
ai0 = tree;
aes();
return io0;
}
menu_text(tree, item, text) int *tree; char *text; {
ct0 = 34;
ct1 = ct2 = 1;
ct3 = 2;
ct4 = 0;
ii0 = item;
ai0 = tree;
ai1 = text;
aes();
return io0;
}
menu_register(id, string) char *string; {
ct0 = 35;
ct1 = ct2 = ct3 = 1;
ct4 = 0;
ii0 = id;
ai0 = string;
aes();
return io0;
}
/* form handling */
form_pf(fmt, args) char *fmt; int args; {
extern char _pfb[1];
_dopf(_pfb, fmt, &args);
form_alert(0, _pfb);
}
form_do(tree, start) int *tree; {
ct0 = 50;
ct1 = ct3 = 1;
ct2 = 2;
ct4 = 0;
ii0 = start;
ai0 = tree;
aes();
return io0;
}
form_dial(flag, sx, sy, sw, sh, bx, by, bw, bh) {
ct0 = 51;
ct1 = 9;
ct3 = ct2 = 1;
ct4 = 0;
ii0 = flag;
ii1 = sx;
ii2 = sy;
ii3 = sw;
ii4 = sh;
ii5 = bx;
ii6 = by;
ii7 = bw;
ii8 = bh;
aes();
return io0;
}
form_center(tree, x, y, w, h) int *tree, *x, *y, *w, *h; {
ct0 = 54;
ct1 = 0;
ct3 = 5;
ct2 = 1;
ct4 = 0;
ai0 = tree;
aes();
*x = io1;
*y = io2;
*w = io3;
*h = io4;
return io0;
}
form_error(num) {
ct0 = 53;
ct1 = ct2 = 1;
ct3 = ct4 = 0;
ii0 = num;
aes();
return io0;
}
form_alert(button, string) char *string; {
ct0 = 52;
ct1 = ct2 = ct3 = 1;
ct4 = 0;
ii0 = button;
ai0 = string;
aes();
return io0;
}
/* AES file selector */
fsel_input(dir, file, button) char *dir, *file; int *button; {
ct0 = 90;
ct1 = ct4 = 0;
ct2 = ct3 = 2;
ai0 = dir;
ai1 = file;
aes();
*button = io1;
return io0;
}
/* AES and VDI support routines */
aes() {
/*
* load address of aes parameter block into a0
* transfer a0 to d1
* load 200 into d0
* trap #2
*/
asm( lag aes0 0 tad 0 1 ldw 200 0 trp 2 );
}
vdi() {
/*
* load address of vdi parameter block into a0
* transfer a0 to d1
* load 115 into d0
* trap #2
*/
asm( lag vdi0 0 tad 0 1 ldw 115 0 trp 2 );
}